home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
THINKC
/
TCL1
/
CDICTION
/
CSTATICS.C
< prev
next >
Wrap
Text File
|
1989-09-15
|
7KB
|
256 lines
/******************************************************************************
CStaticString.c
Displays a Pascal string
SUPERCLASS = CPane
see header for more information.
******************************************************************************/
#include "CStaticString.h"
#include "CTextEnvirons.h"
#include "TBUtilities.h"
#include "CSmartWindow.h"
#include "CError.h"
/******************************************************************************/
void CStaticString::IStaticString
(CView *anEnclosure, CBureaucrat *aSupervisor,
Int16 aWidth, Int16 aHeight, Int16 aHEncl, Int16 aVEncl,
SizingOption aHSizing, SizingOption aVSizing, StringPtr initString)
{
CPane::IPane( anEnclosure, aSupervisor, aWidth, aHeight, aHEncl,
aVEncl, aHSizing, aVSizing);
if (initString)
pStrCopy( initString, itsString);
else itsString[0] = 0;
eraseBehind = false;
useWinFont = TRUE;
itsStyle = 0;
IStaticStringX();
} /* CStaticString::IStaticString */
/******************************************************************************/
void CStaticString::IViewTemp(
CView *anEnclosure, CBureaucrat *aSupervisor,
Ptr viewData)
{
tStaticStringTemp *template;
StringHandle stringH;
template = (tStaticStringTemp *) viewData;
inherited::IViewTemp( anEnclosure, aSupervisor, viewData);
stringH = GetString( template->theStrID);
CheckResource( (Handle) stringH);
pStrCopy( *stringH, itsString);
ReleaseResource( stringH);
eraseBehind = template->eraseBehind != 0;
useWinFont = template->useWinFont != 0;
itsStyle = template->fontStyle;
IStaticStringX();
} /* CStaticString::IViewTemp */
/******************************************************************************/
void CStaticString::IStaticStringX( void)
{
TextInfoRec textEnvirons;
textEnvirons.fontNumber = applFont;
textEnvirons.theSize = 12;
textEnvirons.theStyle = 0;
textEnvirons.theMode = srcOr;
if (!useWinFont)
{
itsEnvironment = new(CTextEnvirons);
((CTextEnvirons *)itsEnvironment)->ITextEnvirons();
((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
}
CalcFontInfo();
AdjustSize();
} /* CStaticString::IStaticStringX */
/******************************************************************************/
void CStaticString::CalcFontInfo( void)
{
FontInfo fInfo;
if (!useWinFont)
itsEnvironment->Restore(); /* set up text environment */
GetFontInfo( &fInfo);
theFontInfo = fInfo;
} /* CStaticString::CalcFontInfo */
/******************************************************************************/
void CStaticString::AdjustSize( void)
{
Int16 sWidth;
Rect r;
CSmartWindow *window;
GrafPtr savedPort;
return;
GetPort( &savedPort);
Prepare();
if (useWinFont)
{
window = (CSmartWindow *)GetWRefCon( macPort);
window->RestoreEnvirons();
TextFace( itsStyle);
}
HLock( this);
sWidth = StringWidth( itsString)+3;
HUnlock( this);
if (sWidth != width)
{
SetRect( &r, 0, 0, sWidth - width, 0);
ChangeSize( &r, TRUE);
}
SetPort( savedPort);
} /* CStaticString::AdjustSize */
/******************************************************************************/
void CStaticString::SetStaticString( StringPtr theString)
{
pStrCopy( theString, itsString);
AdjustSize();
Refresh();
} /* CStaticString::SetStaticString */
/******************************************************************************/
void CStaticString::GetStaticString( StringPtr theString)
{
if (theString)
pStrCopy( itsString, theString);
} /* CStaticString::GetStaticString */
/******************************************************************************/
void CStaticString::SetIndString( Int16 resID, Int16 index)
{
Str255 string;
GetIndString( string, resID, index);
SetStaticString( string);
} /* CStaticString::SetIndString */
/******************************************************************************/
void CStaticString::SetFontNum( Int16 theFontNum)
{
TextInfoRec textEnvirons;
if (useWinFont) return;
((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
textEnvirons.fontNumber = theFontNum;
((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
CalcFontInfo();
AdjustSize();
} /* CStaticString::SetFontNum */
/******************************************************************************/
void CStaticString::SetFontName( StringPtr theFontName)
{
TextInfoRec textEnvirons;
if ((!theFontName) || (useWinFont)) return;
((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
GetFontNumber( theFontName, &textEnvirons.fontNumber);
if (textEnvirons.fontNumber > 0)
((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
CalcFontInfo();
AdjustSize();
} /* CStaticString::SetFontName */
/******************************************************************************/
void CStaticString::SetTextSize( Int16 theSize)
{
TextInfoRec textEnvirons;
if (useWinFont) return;
((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
textEnvirons.theSize = theSize;
((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
CalcFontInfo();
AdjustSize();
} /* CStaticString::SetTextSize */
/******************************************************************************/
void CStaticString::SetTextStyle( Int16 theStyle)
{
TextInfoRec textEnvirons;
if (useWinFont) itsStyle = theStyle;
else
{
((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
textEnvirons.theStyle = theStyle;
((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
}
CalcFontInfo();
AdjustSize();
} /* CStaticString::SetTextStyle */
/******************************************************************************/
void CStaticString::SetTextMode( Int16 theMode)
{
TextInfoRec textEnvirons;
if (useWinFont) return;
((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
textEnvirons.theMode = theMode;
((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
} /* CStaticString::SetTextMode */
/******************************************************************************/
void CStaticString::Draw(Rect *area)
{
Rect r;
CSmartWindow *window;
inherited::Draw( area);
if (eraseBehind)
{
r = frame;
EraseRect( &r);
}
if (useWinFont)
{
window = (CSmartWindow *)GetWRefCon( macPort);
window->RestoreEnvirons();
TextFace( itsStyle);
}
MoveTo( 1, theFontInfo.ascent + 1);
HLock( this);
DrawString( itsString);
HUnlock( this);
} /* CStaticString::Draw */
/******************************************************************************/
void CStaticString::SetEraseBehind( Int16 doIt)
{
eraseBehind = doIt;
} /* CStaticString::SetEraseBehind */
/******************************************************************************/